<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>src/utils/class.region.js - sceneGraph.js</title>
    <link rel="stylesheet" href="http://yui.yahooapis.com/3.9.1/build/cssgrids/cssgrids-min.css">
    <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
    <link rel="stylesheet" href="../assets/css/main.css" id="site_styles">
    <link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
    <script src="http://yui.yahooapis.com/combo?3.9.1/build/yui/yui-min.js"></script>
</head>
<body class="yui3-skin-sam">

<div id="doc">
    <div id="hd" class="yui3-g header">
        <div class="yui3-u-3-4">
            
                <h1><img src="../../logo/logoCGSG_256x57.png" title="sceneGraph.js"></h1>
            
        </div>
        <div class="yui3-u-1-4 version">
            <em>API Docs for: v2.1.0</em>
        </div>
    </div>
    <div id="bd" class="yui3-g">

        <div class="yui3-u-1-4">
            <div id="docs-sidebar" class="sidebar apidocs">
                <div id="api-list">
    <h2 class="off-left">APIs</h2>
    <div id="api-tabview" class="tabview">
        <ul class="tabs">
            <li><a href="#api-classes">Classes</a></li>
            <li><a href="#api-modules">Modules</a></li>
        </ul>

        <div id="api-tabview-filter">
            <input type="search" id="api-filter" placeholder="Type to filter APIs">
        </div>

        <div id="api-tabview-panel">
            <ul id="api-classes" class="apis classes">
            
                <li><a href="../classes/CGSG.html">CGSG</a></li>
            
                <li><a href="../classes/CGSGAccordion.html">CGSGAccordion</a></li>
            
                <li><a href="../classes/CGSGAnimationManager.html">CGSGAnimationManager</a></li>
            
                <li><a href="../classes/CGSGAnimationMethod.html">CGSGAnimationMethod</a></li>
            
                <li><a href="../classes/CGSGBindEntry.html">CGSGBindEntry</a></li>
            
                <li><a href="../classes/CGSGButtonMode.html">CGSGButtonMode</a></li>
            
                <li><a href="../classes/CGSGCollisionGhostOnDemandTester.html">CGSGCollisionGhostOnDemandTester</a></li>
            
                <li><a href="../classes/CGSGCollisionManager.html">CGSGCollisionManager</a></li>
            
                <li><a href="../classes/CGSGCollisionMethod.html">CGSGCollisionMethod</a></li>
            
                <li><a href="../classes/CGSGCollisionRegionTester.html">CGSGCollisionRegionTester</a></li>
            
                <li><a href="../classes/CGSGCollisionTesterFactory.html">CGSGCollisionTesterFactory</a></li>
            
                <li><a href="../classes/CGSGColor.html">CGSGColor</a></li>
            
                <li><a href="../classes/CGSGCSSManager.html">CGSGCSSManager</a></li>
            
                <li><a href="../classes/CGSGDimension.html">CGSGDimension</a></li>
            
                <li><a href="../classes/CGSGEvent.html">CGSGEvent</a></li>
            
                <li><a href="../classes/CGSGEventManager.html">CGSGEventManager</a></li>
            
                <li><a href="../classes/CGSGHandleBox.html">CGSGHandleBox</a></li>
            
                <li><a href="../classes/CGSGImgManager.html">CGSGImgManager</a></li>
            
                <li><a href="../classes/CGSGInterpolator.html">CGSGInterpolator</a></li>
            
                <li><a href="../classes/CGSGInterpolatorLinear.html">CGSGInterpolatorLinear</a></li>
            
                <li><a href="../classes/CGSGInterpolatorTCB.html">CGSGInterpolatorTCB</a></li>
            
                <li><a href="../classes/CGSGKeyFrame.html">CGSGKeyFrame</a></li>
            
                <li><a href="../classes/CGSGMap.html">CGSGMap</a></li>
            
                <li><a href="../classes/CGSGMask.html">CGSGMask</a></li>
            
                <li><a href="../classes/CGSGMaskCache.html">CGSGMaskCache</a></li>
            
                <li><a href="../classes/CGSGMaskClip.html">CGSGMaskClip</a></li>
            
                <li><a href="../classes/CGSGMath.html">CGSGMath</a></li>
            
                <li><a href="../classes/CGSGNode.html">CGSGNode</a></li>
            
                <li><a href="../classes/CGSGNodeButton.html">CGSGNodeButton</a></li>
            
                <li><a href="../classes/CGSGNodeCircle.html">CGSGNodeCircle</a></li>
            
                <li><a href="../classes/CGSGNodeColorPicker.html">CGSGNodeColorPicker</a></li>
            
                <li><a href="../classes/CGSGNodeCurveTCB.html">CGSGNodeCurveTCB</a></li>
            
                <li><a href="../classes/CGSGNodeDomElement.html">CGSGNodeDomElement</a></li>
            
                <li><a href="../classes/CGSGNodeEllipse.html">CGSGNodeEllipse</a></li>
            
                <li><a href="../classes/CGSGNodeImage.html">CGSGNodeImage</a></li>
            
                <li><a href="../classes/CGSGNodeLine.html">CGSGNodeLine</a></li>
            
                <li><a href="../classes/CGSGNodeSlider.html">CGSGNodeSlider</a></li>
            
                <li><a href="../classes/CGSGNodeSliderHandle.html">CGSGNodeSliderHandle</a></li>
            
                <li><a href="../classes/CGSGNodeSprite.html">CGSGNodeSprite</a></li>
            
                <li><a href="../classes/CGSGNodeSquare.html">CGSGNodeSquare</a></li>
            
                <li><a href="../classes/CGSGNodeTabMenu.html">CGSGNodeTabMenu</a></li>
            
                <li><a href="../classes/CGSGNodeText.html">CGSGNodeText</a></li>
            
                <li><a href="../classes/CGSGNodeWebview.html">CGSGNodeWebview</a></li>
            
                <li><a href="../classes/CGSGParticle.html">CGSGParticle</a></li>
            
                <li><a href="../classes/CGSGParticleEmitter.html">CGSGParticleEmitter</a></li>
            
                <li><a href="../classes/CGSGParticleSystem.html">CGSGParticleSystem</a></li>
            
                <li><a href="../classes/CGSGPickNodeMethod.html">CGSGPickNodeMethod</a></li>
            
                <li><a href="../classes/CGSGPosition.html">CGSGPosition</a></li>
            
                <li><a href="../classes/CGSGRegion.html">CGSGRegion</a></li>
            
                <li><a href="../classes/CGSGRotation.html">CGSGRotation</a></li>
            
                <li><a href="../classes/CGSGScale.html">CGSGScale</a></li>
            
                <li><a href="../classes/CGSGSceneGraph.html">CGSGSceneGraph</a></li>
            
                <li><a href="../classes/CGSGSection.html">CGSGSection</a></li>
            
                <li><a href="../classes/CGSGTimeline.html">CGSGTimeline</a></li>
            
                <li><a href="../classes/CGSGTraverser.html">CGSGTraverser</a></li>
            
                <li><a href="../classes/CGSGVector2D.html">CGSGVector2D</a></li>
            
                <li><a href="../classes/CGSGView.html">CGSGView</a></li>
            
                <li><a href="../classes/CGSGWEBVIEWMODE.html">CGSGWEBVIEWMODE</a></li>
            
                <li><a href="../classes/CGSGWrapMode.html">CGSGWrapMode</a></li>
            
                <li><a href="../classes/GLOBAL_CONSTANTS.html">GLOBAL_CONSTANTS</a></li>
            
                <li><a href="../classes/GLOBAL_METHODS.html">GLOBAL_METHODS</a></li>
            
                <li><a href="../classes/GLOBAL_PROPERTIES.html">GLOBAL_PROPERTIES</a></li>
            
                <li><a href="../classes/UTIL_ARRAY.html">UTIL_ARRAY</a></li>
            
                <li><a href="../classes/WUICCGSGNodeImageFactory.html">WUICCGSGNodeImageFactory</a></li>
            
            </ul>

            <ul id="api-modules" class="apis modules">
            
                <li><a href="../modules/Animation.html">Animation</a></li>
            
                <li><a href="../modules/Collision.html">Collision</a></li>
            
                <li><a href="../modules/Math.html">Math</a></li>
            
                <li><a href="../modules/Node.html">Node</a></li>
            
                <li><a href="../modules/ParticleSystem.html">ParticleSystem</a></li>
            
                <li><a href="../modules/Scene.html">Scene</a></li>
            
                <li><a href="../modules/Util.html">Util</a></li>
            
            </ul>
        </div>
    </div>
</div>

            </div>
        </div>
        <div class="yui3-u-3-4">
                <div id="api-options">
        Show:
        <label for="api-show-inherited">
            <input type="checkbox" id="api-show-inherited" checked>
            Inherited
        </label>

        <label for="api-show-protected">
            <input type="checkbox" id="api-show-protected">
            Protected
        </label>

        <label for="api-show-private">
            <input type="checkbox" id="api-show-private">
            Private
        </label>
        <label for="api-show-deprecated">
            <input type="checkbox" id="api-show-deprecated">
            Deprecated
        </label>

    </div>


            <div class="apidocs">
                <div id="docs-main">
                    <div class="content">
                        <h1 class="file-heading">File: src/utils/class.region.js</h1>

<div class="file">
    <pre class="code prettyprint linenums">
/*
 * Copyright (c) 2014 Gwennael Buchet
 *
 * License/Terms of Use
 *
 * Permission is hereby granted, free of charge and for the term of intellectual property rights on the Software, to any
 * person obtaining a copy of this software and associated documentation files (the &quot;Software&quot;), to use, copy, modify
 * and propagate free of charge, anywhere in the world, all or part of the Software subject to the following mandatory conditions:
 *
 *   •    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 *
 *  Any failure to comply with the above shall automatically terminate the license and be construed as a breach of these
 *  Terms of Use causing significant harm to Gwennael Buchet.
 *
 *  THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 *  WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
 *  OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 *  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 *  Except as contained in this notice, the name of Gwennael Buchet shall not be used in advertising or otherwise to promote
 *  the use or other dealings in this Software without prior written authorization from Gwennael Buchet.
 *
 *  These Terms of Use are subject to French law.
 * */

&quot;use strict&quot;;

/**
 * A Position object
 * @class CGSGPosition
 * @extends CGSGVector2D
 * @constructor
 * @param {Number} x X value
 * @param {Number} y Y value
 * @author Gwennael Buchet (gwennael.buchet@gmail.com)
 * @type {CGSGPosition}
 */
var CGSGPosition = CGSGVector2D.extend(
    {
        initialize: function (x, y) {
            this._super(x, y);
        },

        /**
         * Indicates if this position meaningfully equals to the given position.
         * @public
         * @method equalsTo
         * @param position {CGSGPosition} the position to compare to this position
         * @return {Boolean} true if given position exists and has same coordinates as this position, false otherwise
         */
        equalsTo: function (position) {
            return cgsgExist(position) &amp;&amp; position.x === this.x &amp;&amp; position.y === this.y;
        },

        /**
         * return a new object with these attributes
         * @public
         * @method copy
         * @return {CGSGPosition}
         */
        copy: function () {
            return new CGSGPosition(this.x, this.y);
        },

        /**
         * Replace current relative position by this new one
         * @method translateTo
         * @param {Number} newX
         * @param {Number} newY
         */
        translateTo: function (newX, newY) {
            this.x = newX;
            this.y = newY;
        },

        /**
         * Add new coordinate to the current relative one
         * @public
         * @method translateWith
         * @param {Number} x
         * @param {Number} y
         */
        translateWith: function (x, y) {
            this.x += x;
            this.y += y;
        },

        /**
         * Add new coordinate to the current relative one
         * @public
         * @method translateBy
         * @param {Number} x
         * @param {Number} y
         */
        translateBy: function (x, y) {
            this.x *= x;
            this.y *= y;
        },

        /**
         * Return true if x&lt;0 || y&lt;0
         * @method isNegative
         * @return {boolean}
         */
        isNegative: function () {
            return (this.x &lt; 0 || this.y &lt; 0);
        }
    }
);

/**
 * A Scale object
 * @class CGSGScale
 * @extends CGSGPosition
 * @constructor
 * @param {Number} x X value
 * @param {Number} y Y value
 * @author Gwennael Buchet (gwennael.buchet@gmail.com)
 * @type {CGSGScale}
 */
var CGSGScale = CGSGPosition.extend(
    {
        initialize: function (x, y) {
            this._super(x, y);
        }
    }
);

/**
 * A Rotation object
 * @class CGSGRotation
 * @extends Object
 * @constructor
 * @param {Number} angle Angle value
 * @author Gwennael Buchet (gwennael.buchet@gmail.com)
 * @type {CGSGRotation}
 */
var CGSGRotation = CGSGObject.extend(
    {
        initialize: function (angle) {
            this.angle = angle;
        },

        /**
         * return a new object with these attributes
         * @public
         * @method copy
         * @return {CGSGRotation}
         */
        copy: function () {
            return new CGSGRotation(this.angle);
        },

        /**
         * Replace current angle by this new one
         * @public
         * @method rotateTo
         * @param {Number} newAngle
         */
        rotateTo: function (newAngle) {
            this.angle = newAngle;
        },

        /**
         * Multiply this angle by this factor
         * @public
         * @method rotateBy
         * @param {Number} rotateFactor
         */
        rotateBy: function (rotateFactor) {
            this.multiplyEquals(rotateFactor);
        },

        /**
         * Add this angle to the current one
         * @public
         * @method rotateWith
         * @param {Number} angle
         */
        rotateWith: function (angle) {
            this.addEquals(angle);
        },

        /**
         * Add this angle to the current one
         * @public
         * @method add
         * @param {Number} angle
         */
        addEquals: function (angle) {
            this.angle += angle;
        },

        /**
         * Subtract this angle to the current one
         * @public
         * @method substract
         * @param {Number} angle
         */
        subtractEquals: function (angle) {
            this.angle -= angle;
        },

        /**
         * Multiply this angle to the current one
         * @public
         * @method multiply
         * @param {Number} angle
         */
        multiplyEquals: function (angle) {
            this.angle *= angle;
        }
    }
);

/**
 * A Dimension object
 * @class CGSGDimension
 * @extends CGSGVector2D
 * @constructor
 * @param {Number} width
 * @param {Number} height
 * @author Gwennael Buchet (gwennael.buchet@gmail.com)
 * @type {CGSGDimension}
 */
var CGSGDimension = CGSGVector2D.extend(
    {
        initialize: function (width, height) {

            this._super(width, height);

            /**
             * Alias to the x attribute
             * @property width
             * @type {Number}
             */
            this.width = this.x;
            /**
             * Alias to the y attribute
             * @property height
             * @type {Number}
             */
            this.height = this.y;
        },

        /**
         * Return a new object with these attributes
         * @method copy
         * @return {CGSGDimension}
         */
        copy: function () {
            return new CGSGDimension(this.width, this.height);
        },

        /**
         * Replace current dimension by these new ones
         * @method resizeTo
         * @param {Number} newWidth
         * @param {Number} newHeight
         * */
        resizeTo: function (newWidth, newHeight) {
            if (newWidth &gt;= 0) {
                this.width = newWidth;
            }
            if (newHeight &gt;= 0) {
                this.height = newHeight;
            }
        },

        /**
         * Multiply current dimension by these new ones
         * @method resizeBy
         * @param {Number} widthFactor
         * @param {Number} heightFactor
         * */
        resizeBy: function (widthFactor, heightFactor) {
            if (widthFactor &gt;= 0) {
                this.width *= widthFactor;
            }
            if (heightFactor &gt;= 0) {
                this.height *= heightFactor;
            }
        },

        /**
         * Increase/decrease current dimension with adding values
         * @method resizeWith
         * @param {Number} width
         * @param {Number} height
         * */
        resizeWith: function (width, height) {
            if (this.width + width &gt;= 0) {
                this.width += width;
            }
            if (this.height + height &gt;= 0) {
                this.height += height;
            }
        },

        /**
         * Return true if no pixels are inside the dimension
         * @method isEmpty
         * @return {boolean}
         */
        isEmpty: function () {
            return (this.width &lt;= 0 || this.height &lt;= 0);
        }
    }
);

/**
 * A Region object encapsulates a CGSGPosition and a CGSGDimension
 * @class CGSGRegion
 * @extends Object
 * @constructor
 * @param {Number} x Position on X
 * @param {Number} y Position on Y
 * @param {Number} width Dimension on Width
 * @param {Number} height Dimension on Height
 * @author Gwennael Buchet (gwennael.buchet@gmail.com)
 * @type {CGSGRegion}
 */
var CGSGRegion = CGSGObject.extend(
    {
        initialize: function (x, y, width, height) {
            /**
             * @property position
             * @type {CGSGPosition}
             */
            this.position = new CGSGPosition(x, y);
            /**
             * @property dimension
             * @type {CGSGDimension}
             */
            this.dimension = new CGSGDimension(width, height);
        },

        /**
         * @method copy
         * @return {CGSGRegion}
         */
        copy: function () {
            return new CGSGRegion(this.position.x, this.position.y, this.dimension.width, this.dimension.height);
        },

        /**
         * @method add
         * @param region {CGSGRegion}
         */
        addEquals: function (region) {
            this.position.translateWith(region.position.x, region.position.y);
            this.dimension.resizeWith(region.dimension.width, region.dimension.height);
        },

        /**
         * @method subtract
         * @param {CGSGRegion} region
         */
        subtractEquals: function (region) {
            this.position.translateWith(-region.position.x, -region.position.y);
            this.dimension.resizeWith(-region.dimension.width, -region.dimension.height);
        },

        /**
         * Return true if no pixels are inside the region
         * @method isEmpty
         * @return {boolean}
         */
        isEmpty: function () {
            return this.dimension.isEmpty();
        },

        /**
         * Return true if dimension is Empty or position is negative
         * @method isNegative
         * @return {boolean}
         */
        isNegative: function () {
            return (this.isEmpty() || this.position.isNegative());
        }
    }
);


    </pre>
</div>

                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="../assets/vendor/prettify/prettify-min.js"></script>
<script>prettyPrint();</script>
<script src="../assets/js/yui-prettify.js"></script>
<script src="../assets/../api.js"></script>
<script src="../assets/js/api-filter.js"></script>
<script src="../assets/js/api-list.js"></script>
<script src="../assets/js/api-search.js"></script>
<script src="../assets/js/apidocs.js"></script>
</body>
</html>
